{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats\n",
    "import pandas as pd\n",
    "import matplotlib as mpl\n",
    "mpl.rcParams['pdf.fonttype'] = 42\n",
    "import numpy as np\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%run dataset.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "onemillionv2 = DATASET('onemillionv2')\n",
    "onemillionv2.load_dataset()\n",
    "\n",
    "onemillionv3 = DATASET('onemillionv3')\n",
    "onemillionv3.load_dataset()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_sc = onemillionv2.data_sc[onemillionv2.data_sc.obs['time']=='UT']\n",
    "data_obs = data_sc.obs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>orig.ident</th>\n",
       "      <th>nCount_RNA</th>\n",
       "      <th>nFeature_RNA</th>\n",
       "      <th>batch</th>\n",
       "      <th>lane</th>\n",
       "      <th>chem</th>\n",
       "      <th>exp.id</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>percent.mt</th>\n",
       "      <th>nCount_SCT</th>\n",
       "      <th>nFeature_SCT</th>\n",
       "      <th>cell_type</th>\n",
       "      <th>cell_type_lowerres</th>\n",
       "      <th>assignment</th>\n",
       "      <th>bare_barcode_lane</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>index</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGAGTACAT_180925_lane1</th>\n",
       "      <td>1M_cells</td>\n",
       "      <td>5190.0</td>\n",
       "      <td>1518</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>V2</td>\n",
       "      <td>2</td>\n",
       "      <td>UT</td>\n",
       "      <td>1.560694</td>\n",
       "      <td>3297.0</td>\n",
       "      <td>1438</td>\n",
       "      <td>mono 2</td>\n",
       "      <td>monocyte</td>\n",
       "      <td>LLDeep_1370</td>\n",
       "      <td>AAACCTGAGAGTACAT_180925_lane1</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGTGTCTCA_180925_lane1</th>\n",
       "      <td>1M_cells</td>\n",
       "      <td>5597.0</td>\n",
       "      <td>1652</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>V2</td>\n",
       "      <td>12</td>\n",
       "      <td>UT</td>\n",
       "      <td>3.394676</td>\n",
       "      <td>3353.0</td>\n",
       "      <td>1507</td>\n",
       "      <td>th1 CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "      <td>LLDeep_0434</td>\n",
       "      <td>AAACCTGAGTGTCTCA_180925_lane1</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAGTCGATT_180925_lane1</th>\n",
       "      <td>1M_cells</td>\n",
       "      <td>3039.0</td>\n",
       "      <td>849</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>V2</td>\n",
       "      <td>11</td>\n",
       "      <td>UT</td>\n",
       "      <td>3.685423</td>\n",
       "      <td>2786.0</td>\n",
       "      <td>849</td>\n",
       "      <td>naive CD8T</td>\n",
       "      <td>CD8T</td>\n",
       "      <td>LLDeep_1319</td>\n",
       "      <td>AAACCTGCAGTCGATT_180925_lane1</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCATTCGACA_180925_lane1</th>\n",
       "      <td>1M_cells</td>\n",
       "      <td>3876.0</td>\n",
       "      <td>1048</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>V2</td>\n",
       "      <td>2</td>\n",
       "      <td>UT</td>\n",
       "      <td>3.766770</td>\n",
       "      <td>2996.0</td>\n",
       "      <td>1047</td>\n",
       "      <td>mono 1</td>\n",
       "      <td>monocyte</td>\n",
       "      <td>LLDeep_1370</td>\n",
       "      <td>AAACCTGCATTCGACA_180925_lane1</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGGTAATAGCA_180925_lane1</th>\n",
       "      <td>1M_cells</td>\n",
       "      <td>4272.0</td>\n",
       "      <td>1141</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>180925_lane1</td>\n",
       "      <td>V2</td>\n",
       "      <td>12</td>\n",
       "      <td>UT</td>\n",
       "      <td>4.564607</td>\n",
       "      <td>3076.0</td>\n",
       "      <td>1131</td>\n",
       "      <td>mono 1</td>\n",
       "      <td>monocyte</td>\n",
       "      <td>LLDeep_0434</td>\n",
       "      <td>AAACCTGGTAATAGCA_180925_lane1</td>\n",
       "      <td>UT</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              orig.ident  nCount_RNA  nFeature_RNA  \\\n",
       "index                                                                \n",
       "AAACCTGAGAGTACAT_180925_lane1   1M_cells      5190.0          1518   \n",
       "AAACCTGAGTGTCTCA_180925_lane1   1M_cells      5597.0          1652   \n",
       "AAACCTGCAGTCGATT_180925_lane1   1M_cells      3039.0           849   \n",
       "AAACCTGCATTCGACA_180925_lane1   1M_cells      3876.0          1048   \n",
       "AAACCTGGTAATAGCA_180925_lane1   1M_cells      4272.0          1141   \n",
       "\n",
       "                                      batch          lane chem  exp.id  \\\n",
       "index                                                                    \n",
       "AAACCTGAGAGTACAT_180925_lane1  180925_lane1  180925_lane1   V2       2   \n",
       "AAACCTGAGTGTCTCA_180925_lane1  180925_lane1  180925_lane1   V2      12   \n",
       "AAACCTGCAGTCGATT_180925_lane1  180925_lane1  180925_lane1   V2      11   \n",
       "AAACCTGCATTCGACA_180925_lane1  180925_lane1  180925_lane1   V2       2   \n",
       "AAACCTGGTAATAGCA_180925_lane1  180925_lane1  180925_lane1   V2      12   \n",
       "\n",
       "                              timepoint  percent.mt  nCount_SCT  nFeature_SCT  \\\n",
       "index                                                                           \n",
       "AAACCTGAGAGTACAT_180925_lane1        UT    1.560694      3297.0          1438   \n",
       "AAACCTGAGTGTCTCA_180925_lane1        UT    3.394676      3353.0          1507   \n",
       "AAACCTGCAGTCGATT_180925_lane1        UT    3.685423      2786.0           849   \n",
       "AAACCTGCATTCGACA_180925_lane1        UT    3.766770      2996.0          1047   \n",
       "AAACCTGGTAATAGCA_180925_lane1        UT    4.564607      3076.0          1131   \n",
       "\n",
       "                                cell_type cell_type_lowerres   assignment  \\\n",
       "index                                                                       \n",
       "AAACCTGAGAGTACAT_180925_lane1      mono 2           monocyte  LLDeep_1370   \n",
       "AAACCTGAGTGTCTCA_180925_lane1    th1 CD4T               CD4T  LLDeep_0434   \n",
       "AAACCTGCAGTCGATT_180925_lane1  naive CD8T               CD8T  LLDeep_1319   \n",
       "AAACCTGCATTCGACA_180925_lane1      mono 1           monocyte  LLDeep_1370   \n",
       "AAACCTGGTAATAGCA_180925_lane1      mono 1           monocyte  LLDeep_0434   \n",
       "\n",
       "                                           bare_barcode_lane time  \n",
       "index                                                              \n",
       "AAACCTGAGAGTACAT_180925_lane1  AAACCTGAGAGTACAT_180925_lane1   UT  \n",
       "AAACCTGAGTGTCTCA_180925_lane1  AAACCTGAGTGTCTCA_180925_lane1   UT  \n",
       "AAACCTGCAGTCGATT_180925_lane1  AAACCTGCAGTCGATT_180925_lane1   UT  \n",
       "AAACCTGCATTCGACA_180925_lane1  AAACCTGCATTCGACA_180925_lane1   UT  \n",
       "AAACCTGGTAATAGCA_180925_lane1  AAACCTGGTAATAGCA_180925_lane1   UT  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_obs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "celltypes = ['CD4T', 'CD8T', 'monocyte', 'NK', 'DC', 'B']\n",
    "plot_df = data_obs['cell_type_lowerres'].value_counts(normalize=True).loc[celltypes]\n",
    "plt.bar(x=plot_df.index, height=plot_df.values)\n",
    "plt.ylim([0, 0.40])\n",
    "plt.savefig('cell_abundance_oelenv2.pdf')\n",
    "plt.savefig('cell_abundance_oelenv2.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>predicted.celltype.l1</th>\n",
       "      <th>predicted.celltype.l1.score</th>\n",
       "      <th>predicted.celltype.l2</th>\n",
       "      <th>predicted.celltype.l2.score</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>barcode</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGAAACCAT_180920_lane1</th>\n",
       "      <td>CD8 T</td>\n",
       "      <td>0.755924</td>\n",
       "      <td>CD8 TEM</td>\n",
       "      <td>0.755924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGTAGCCGA_180920_lane1</th>\n",
       "      <td>Mono</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>CD16 Mono</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAATCTACG_180920_lane1</th>\n",
       "      <td>NK</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NK</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCACATCCAA_180920_lane1</th>\n",
       "      <td>other</td>\n",
       "      <td>0.546320</td>\n",
       "      <td>ILC</td>\n",
       "      <td>0.546320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAGCTCGAC_180920_lane1</th>\n",
       "      <td>NK</td>\n",
       "      <td>0.733094</td>\n",
       "      <td>NK</td>\n",
       "      <td>0.733094</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              predicted.celltype.l1  \\\n",
       "barcode                                               \n",
       "AAACCTGAGAAACCAT_180920_lane1                 CD8 T   \n",
       "AAACCTGAGTAGCCGA_180920_lane1                  Mono   \n",
       "AAACCTGCAATCTACG_180920_lane1                    NK   \n",
       "AAACCTGCACATCCAA_180920_lane1                 other   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                    NK   \n",
       "\n",
       "                               predicted.celltype.l1.score  \\\n",
       "barcode                                                      \n",
       "AAACCTGAGAAACCAT_180920_lane1                     0.755924   \n",
       "AAACCTGAGTAGCCGA_180920_lane1                     1.000000   \n",
       "AAACCTGCAATCTACG_180920_lane1                     1.000000   \n",
       "AAACCTGCACATCCAA_180920_lane1                     0.546320   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                     0.733094   \n",
       "\n",
       "                              predicted.celltype.l2  \\\n",
       "barcode                                               \n",
       "AAACCTGAGAAACCAT_180920_lane1               CD8 TEM   \n",
       "AAACCTGAGTAGCCGA_180920_lane1             CD16 Mono   \n",
       "AAACCTGCAATCTACG_180920_lane1                    NK   \n",
       "AAACCTGCACATCCAA_180920_lane1                   ILC   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                    NK   \n",
       "\n",
       "                               predicted.celltype.l2.score  \n",
       "barcode                                                     \n",
       "AAACCTGAGAAACCAT_180920_lane1                     0.755924  \n",
       "AAACCTGAGTAGCCGA_180920_lane1                     1.000000  \n",
       "AAACCTGCAATCTACG_180920_lane1                     1.000000  \n",
       "AAACCTGCACATCCAA_180920_lane1                     0.546320  \n",
       "AAACCTGCAGCTCGAC_180920_lane1                     0.733094  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "azimuith_df = pd.read_csv(\n",
    "    '1M_v2_20201029_azimuth.tsv',\n",
    "    sep='\\t', index_col=0\n",
    ")\n",
    "azimuith_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['monocyte', 'CD4T', 'CD8T', 'NK', 'megakaryocyte', 'B', 'DC', 'plasma B', 'unknown', 'hemapoietic stem']\n",
       "Categories (10, object): ['B', 'hemapoietic stem', 'megakaryocyte', 'NK', ..., 'CD4T', 'CD8T', 'monocyte', 'DC']"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_obs['cell_type_lowerres'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['CD8 T', 'Mono', 'NK', 'other', 'CD4 T', 'DC', 'B', 'other T'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "azimuith_df['predicted.celltype.l1'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>predicted.celltype.l1</th>\n",
       "      <th>predicted.celltype.l1.score</th>\n",
       "      <th>predicted.celltype.l2</th>\n",
       "      <th>predicted.celltype.l2.score</th>\n",
       "      <th>cell_type_mapped</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>barcode</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGAAACCAT_180920_lane1</th>\n",
       "      <td>CD8 T</td>\n",
       "      <td>0.755924</td>\n",
       "      <td>CD8 TEM</td>\n",
       "      <td>0.755924</td>\n",
       "      <td>CD8T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGTAGCCGA_180920_lane1</th>\n",
       "      <td>Mono</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>CD16 Mono</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>monocyte</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAATCTACG_180920_lane1</th>\n",
       "      <td>NK</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NK</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>NK</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCACATCCAA_180920_lane1</th>\n",
       "      <td>other</td>\n",
       "      <td>0.546320</td>\n",
       "      <td>ILC</td>\n",
       "      <td>0.546320</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAGCTCGAC_180920_lane1</th>\n",
       "      <td>NK</td>\n",
       "      <td>0.733094</td>\n",
       "      <td>NK</td>\n",
       "      <td>0.733094</td>\n",
       "      <td>NK</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              predicted.celltype.l1  \\\n",
       "barcode                                               \n",
       "AAACCTGAGAAACCAT_180920_lane1                 CD8 T   \n",
       "AAACCTGAGTAGCCGA_180920_lane1                  Mono   \n",
       "AAACCTGCAATCTACG_180920_lane1                    NK   \n",
       "AAACCTGCACATCCAA_180920_lane1                 other   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                    NK   \n",
       "\n",
       "                               predicted.celltype.l1.score  \\\n",
       "barcode                                                      \n",
       "AAACCTGAGAAACCAT_180920_lane1                     0.755924   \n",
       "AAACCTGAGTAGCCGA_180920_lane1                     1.000000   \n",
       "AAACCTGCAATCTACG_180920_lane1                     1.000000   \n",
       "AAACCTGCACATCCAA_180920_lane1                     0.546320   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                     0.733094   \n",
       "\n",
       "                              predicted.celltype.l2  \\\n",
       "barcode                                               \n",
       "AAACCTGAGAAACCAT_180920_lane1               CD8 TEM   \n",
       "AAACCTGAGTAGCCGA_180920_lane1             CD16 Mono   \n",
       "AAACCTGCAATCTACG_180920_lane1                    NK   \n",
       "AAACCTGCACATCCAA_180920_lane1                   ILC   \n",
       "AAACCTGCAGCTCGAC_180920_lane1                    NK   \n",
       "\n",
       "                               predicted.celltype.l2.score cell_type_mapped  \n",
       "barcode                                                                      \n",
       "AAACCTGAGAAACCAT_180920_lane1                     0.755924             CD8T  \n",
       "AAACCTGAGTAGCCGA_180920_lane1                     1.000000         monocyte  \n",
       "AAACCTGCAATCTACG_180920_lane1                     1.000000               NK  \n",
       "AAACCTGCACATCCAA_180920_lane1                     0.546320             None  \n",
       "AAACCTGCAGCTCGAC_180920_lane1                     0.733094               NK  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mapping_names = {'CD8 T': 'CD8T', \n",
    "                 'CD4 T': 'CD4T',\n",
    "                 'Mono': 'monocyte',\n",
    "                 'NK': 'NK',\n",
    "                 'B': 'B',\n",
    "                 'DC': 'DC'}\n",
    "azimuith_df['cell_type_mapped'] = [mapping_names.get(name) for name in \n",
    "                                   azimuith_df['predicted.celltype.l1']]\n",
    "azimuith_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cell_type_lowerres</th>\n",
       "      <th>cell_type_mapped</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGAGTACAT_180925_lane1</th>\n",
       "      <td>monocyte</td>\n",
       "      <td>monocyte</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGAGTGTCTCA_180925_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCAGTCGATT_180925_lane1</th>\n",
       "      <td>CD8T</td>\n",
       "      <td>CD8T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGCATTCGACA_180925_lane1</th>\n",
       "      <td>monocyte</td>\n",
       "      <td>monocyte</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCTGGTAATAGCA_180925_lane1</th>\n",
       "      <td>monocyte</td>\n",
       "      <td>monocyte</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              cell_type_lowerres cell_type_mapped\n",
       "AAACCTGAGAGTACAT_180925_lane1           monocyte         monocyte\n",
       "AAACCTGAGTGTCTCA_180925_lane1               CD4T             CD4T\n",
       "AAACCTGCAGTCGATT_180925_lane1               CD8T             CD8T\n",
       "AAACCTGCATTCGACA_180925_lane1           monocyte         monocyte\n",
       "AAACCTGGTAATAGCA_180925_lane1           monocyte         monocyte"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "merged_classification_df = pd.concat([data_obs[['cell_type_lowerres']],\n",
    "                                      azimuith_df[['cell_type_mapped']]],\n",
    "                                     axis=1).dropna()\n",
    "merged_classification_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "celltypes = ['CD4T', 'CD8T', 'monocyte', 'DC', 'NK', 'B']\n",
    "accuracy_df = pd.DataFrame(\n",
    "    data=np.zeros((6, 6)),\n",
    "    index=celltypes,\n",
    "    columns=celltypes\n",
    ")\n",
    "for celltype_onemillionv2 in celltypes:\n",
    "    for celltype_azimuth in celltypes:\n",
    "        common_classification_num = merged_classification_df[\n",
    "            (merged_classification_df['cell_type_lowerres']==celltype_onemillionv2) & \n",
    "            (merged_classification_df['cell_type_mapped']==celltype_azimuth)\n",
    "        ].shape[0]\n",
    "        onemillion_classification_num = merged_classification_df[\n",
    "            (merged_classification_df['cell_type_lowerres']==celltype_onemillionv2)\n",
    "        ].shape[0]\n",
    "        azimuth_classification_num = merged_classification_df[\n",
    "            (merged_classification_df['cell_type_mapped']==celltype_azimuth)\n",
    "        ].shape[0]\n",
    "        accuracy_df[celltype_onemillionv2].loc[celltype_azimuth] = common_classification_num/onemillion_classification_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(6, 5))\n",
    "sns.heatmap(accuracy_df, vmin=0, vmax=1,\n",
    "            cmap=\"YlGnBu\", \n",
    "            annot=True, annot_kws={\"size\": 10},\n",
    "            fmt='.2f')\n",
    "plt.xlabel('Cell type in Oelen v2')\n",
    "plt.ylabel('Cell type by Azimuth Algorithm')\n",
    "plt.savefig('marker_gene_azimuth_classification.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>predicted.celltype.l1</th>\n",
       "      <th>predicted.celltype.l1.score</th>\n",
       "      <th>predicted.celltype.l2</th>\n",
       "      <th>predicted.celltype.l2.score</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>barcode</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCCAAGATACCAA_190109_lane1</th>\n",
       "      <td>CD8 T</td>\n",
       "      <td>0.981818</td>\n",
       "      <td>CD8 Naive</td>\n",
       "      <td>0.955707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCAAGTCCCTAA_190109_lane1</th>\n",
       "      <td>CD4 T</td>\n",
       "      <td>0.379819</td>\n",
       "      <td>CD4 CTL</td>\n",
       "      <td>0.327444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACAAGAGTGC_190109_lane1</th>\n",
       "      <td>CD4 T</td>\n",
       "      <td>0.740111</td>\n",
       "      <td>CD4 Naive</td>\n",
       "      <td>0.723822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACAATCCAGT_190109_lane1</th>\n",
       "      <td>CD4 T</td>\n",
       "      <td>0.916869</td>\n",
       "      <td>CD4 TCM</td>\n",
       "      <td>0.468549</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACACTATCCC_190109_lane1</th>\n",
       "      <td>Mono</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>CD14 Mono</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              predicted.celltype.l1  \\\n",
       "barcode                                               \n",
       "AAACCCAAGATACCAA_190109_lane1                 CD8 T   \n",
       "AAACCCAAGTCCCTAA_190109_lane1                 CD4 T   \n",
       "AAACCCACAAGAGTGC_190109_lane1                 CD4 T   \n",
       "AAACCCACAATCCAGT_190109_lane1                 CD4 T   \n",
       "AAACCCACACTATCCC_190109_lane1                  Mono   \n",
       "\n",
       "                               predicted.celltype.l1.score  \\\n",
       "barcode                                                      \n",
       "AAACCCAAGATACCAA_190109_lane1                     0.981818   \n",
       "AAACCCAAGTCCCTAA_190109_lane1                     0.379819   \n",
       "AAACCCACAAGAGTGC_190109_lane1                     0.740111   \n",
       "AAACCCACAATCCAGT_190109_lane1                     0.916869   \n",
       "AAACCCACACTATCCC_190109_lane1                     1.000000   \n",
       "\n",
       "                              predicted.celltype.l2  \\\n",
       "barcode                                               \n",
       "AAACCCAAGATACCAA_190109_lane1             CD8 Naive   \n",
       "AAACCCAAGTCCCTAA_190109_lane1               CD4 CTL   \n",
       "AAACCCACAAGAGTGC_190109_lane1             CD4 Naive   \n",
       "AAACCCACAATCCAGT_190109_lane1               CD4 TCM   \n",
       "AAACCCACACTATCCC_190109_lane1             CD14 Mono   \n",
       "\n",
       "                               predicted.celltype.l2.score  \n",
       "barcode                                                     \n",
       "AAACCCAAGATACCAA_190109_lane1                     0.955707  \n",
       "AAACCCAAGTCCCTAA_190109_lane1                     0.327444  \n",
       "AAACCCACAAGAGTGC_190109_lane1                     0.723822  \n",
       "AAACCCACAATCCAGT_190109_lane1                     0.468549  \n",
       "AAACCCACACTATCCC_190109_lane1                     1.000000  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "azimuith_df_v3 = pd.read_csv(\n",
    "    '1M_v3_20201106_azimuth.tsv',\n",
    "    sep='\\t', index_col=0\n",
    ")\n",
    "azimuith_df_v3.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "mapping_names = {'CD8 T': 'CD8T', \n",
    "                 'CD4 T': 'CD4T',\n",
    "                 'Mono': 'monocyte',\n",
    "                 'NK': 'NK',\n",
    "                 'B': 'B',\n",
    "                 'DC': 'DC'}\n",
    "azimuith_df_v3['cell_type_mapped'] = [mapping_names.get(name) for name in \n",
    "                                      azimuith_df_v3['predicted.celltype.l1']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_scv3 = onemillionv3.data_sc[onemillionv3.data_sc.obs['time']=='UT']\n",
    "data_obsv3 = data_scv3.obs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cell_type_lowerres</th>\n",
       "      <th>cell_type_mapped</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAACCCAAGATACCAA_190109_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD8T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACAAGAGTGC_190109_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACAATCCAGT_190109_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCACAGGTACGA_190109_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AAACCCAGTCTACGTA_190109_lane1</th>\n",
       "      <td>CD4T</td>\n",
       "      <td>CD4T</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              cell_type_lowerres cell_type_mapped\n",
       "AAACCCAAGATACCAA_190109_lane1               CD4T             CD8T\n",
       "AAACCCACAAGAGTGC_190109_lane1               CD4T             CD4T\n",
       "AAACCCACAATCCAGT_190109_lane1               CD4T             CD4T\n",
       "AAACCCACAGGTACGA_190109_lane1               CD4T             CD4T\n",
       "AAACCCAGTCTACGTA_190109_lane1               CD4T             CD4T"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "merged_classification_df_v3 = pd.concat([data_obsv3[['cell_type_lowerres']],\n",
    "                                       azimuith_df_v3[['cell_type_mapped']]],\n",
    "                                       axis=1).dropna()\n",
    "merged_classification_df_v3.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "celltypes = ['CD4T', 'CD8T', 'monocyte', 'DC', 'NK', 'B']\n",
    "accuracy_df_v3 = pd.DataFrame(\n",
    "    data=np.zeros((6, 6)),\n",
    "    index=celltypes,\n",
    "    columns=celltypes\n",
    ")\n",
    "for celltype_onemillionv2 in celltypes:\n",
    "    for celltype_azimuth in celltypes:\n",
    "        common_classification_num = merged_classification_df_v3[\n",
    "            (merged_classification_df_v3['cell_type_lowerres']==celltype_onemillionv2) & \n",
    "            (merged_classification_df_v3['cell_type_mapped']==celltype_azimuth)\n",
    "        ].shape[0]\n",
    "        onemillion_classification_num = merged_classification_df_v3[\n",
    "            (merged_classification_df_v3['cell_type_lowerres']==celltype_onemillionv2)\n",
    "        ].shape[0]\n",
    "        azimuth_classification_num = merged_classification_df_v3[\n",
    "            (merged_classification_df_v3['cell_type_mapped']==celltype_azimuth)\n",
    "        ].shape[0]\n",
    "        accuracy_df_v3[celltype_onemillionv2].loc[celltype_azimuth] = common_classification_num/onemillion_classification_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CD4T</th>\n",
       "      <th>CD8T</th>\n",
       "      <th>monocyte</th>\n",
       "      <th>DC</th>\n",
       "      <th>NK</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>CD4T</th>\n",
       "      <td>0.952222</td>\n",
       "      <td>0.157213</td>\n",
       "      <td>0.003671</td>\n",
       "      <td>0.001845</td>\n",
       "      <td>0.016403</td>\n",
       "      <td>0.001099</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CD8T</th>\n",
       "      <td>0.046923</td>\n",
       "      <td>0.787428</td>\n",
       "      <td>0.001606</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.014666</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>monocyte</th>\n",
       "      <td>0.000513</td>\n",
       "      <td>0.000409</td>\n",
       "      <td>0.993346</td>\n",
       "      <td>0.177122</td>\n",
       "      <td>0.000386</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DC</th>\n",
       "      <td>0.000085</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000574</td>\n",
       "      <td>0.821033</td>\n",
       "      <td>0.000193</td>\n",
       "      <td>0.001099</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NK</th>\n",
       "      <td>0.000256</td>\n",
       "      <td>0.054950</td>\n",
       "      <td>0.000688</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.968352</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000115</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.997802</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              CD4T      CD8T  monocyte        DC        NK         B\n",
       "CD4T      0.952222  0.157213  0.003671  0.001845  0.016403  0.001099\n",
       "CD8T      0.046923  0.787428  0.001606  0.000000  0.014666  0.000000\n",
       "monocyte  0.000513  0.000409  0.993346  0.177122  0.000386  0.000000\n",
       "DC        0.000085  0.000000  0.000574  0.821033  0.000193  0.001099\n",
       "NK        0.000256  0.054950  0.000688  0.000000  0.968352  0.000000\n",
       "B         0.000000  0.000000  0.000115  0.000000  0.000000  0.997802"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_df_v3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(6, 5))\n",
    "sns.heatmap(accuracy_df_v3, vmin=0, vmax=1,\n",
    "            cmap=\"YlGnBu\", \n",
    "            annot=True, annot_kws={\"size\": 10},\n",
    "            fmt='.2f')\n",
    "plt.xlabel('Cell type in Oelen v3')\n",
    "plt.ylabel('Cell type by Azimuth Algorithm')\n",
    "plt.savefig('marker_gene_azimuth_classification_oelenv3.pdf')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
